﻿//给两个整数数组 nums1 和 nums2 ，返回 两个数组中 公共的 、长度最长的子数组的长度 。
//
//输入：nums1 = [1, 2, 3, 2, 1], nums2 = [3, 2, 1, 4, 7]
//输出：3
//解释：长度最长的公共子数组是[3, 2, 1] 。
//
//输入：nums1 = [0, 0, 0, 0, 0], nums2 = [0, 0, 0, 0, 0]
//输出：5
//
//提示：
//	1 <= nums1.length, nums2.length <= 1000
//	0 <= nums1[i], nums2[i] <= 100

class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        // 1.创建dp表
        // 2.初始化
        // 3.填表
        // 4.返回值

        int m = nums1.size(), n = nums2.size();
        vector<vector<int>> dp(m + 1, vector<int>(n + 1));
        int ret = 0;
        for (int i = 1; i <= m; i++)
            for (int j = 1; j <= n; j++)
                if (nums1[i - 1] == nums2[j - 1]) // ⼀遍填表，⼀遍更新最⼤值

                    dp[i][j] = dp[i - 1][j - 1] + 1, ret = max(ret, dp[i][j]);
        return ret;
    }
};